﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.power
    乘幂法 求实矩阵的特征向量
    参数 n: 
    参数 a: a[n][n]实矩阵
    参数 eps: 精度要求
    参数 v: v[n]特征向量
    参数 inter: 最多迭代次数，1000
    返回值 函数返回绝对值最大的特征值。在本函数程序返回时将显示迭代次数。本程序最多迭代1000次。
    */

    public static string drive_power()
    {
        int i;
        double[,] a1 = new double[3, 3] {
            { 0, 1, 1.5 },
            { -5, -0.5, 1 },
            { -1, 2, 3.5 }
        };
        double[,] a2 = new double[3, 3] {
            { -5, 1, 5 },
            { 1, 0, 0 },
            { 0, 1, 0 }
        };
        double[] v = new double[3] {
            0, 0, 1
        };

        double lambda;
        lambda = gl.power(3, a1, 0.0000001, v, 1000);

        string rs = "";
        rs += gl.html_table("Mat A1(绝对值最大的特征值 lambda1 =" + lambda + "):", a1);
        rs += gl.html_table("特征向量：", v);

        lambda = gl.power(3, a2, 0.0000001, v, 1000);

        rs += gl.html_table("Mat A2(绝对值最大的特征值 lambda2 =" + lambda + "):", a2);
        rs += gl.html_table("特征向量：", v);

        return rs;
    }
}